import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)
// 需要永久存储，且下次APP启动需要取出的，在state中的变量名
let saveStateKeys = ['vuex_user', 'vuex_token', 'vuex_account', 'stockType']

// 保存变量到本地存储中
const saveLifeData = function(key, value) {
  // 判断变量名是否在需要存储的数组中
  if (saveStateKeys.indexOf(key) != -1) {
    // 获取本地存储的lifeData对象，将变量添加到对象中
    let tmp = uni.getStorageSync('lifeData')
    // 第一次打开APP，不存在lifeData变量，故放一个{}空对象
    tmp = tmp || {}
    tmp[key] = value
    // 执行这一步后，所有需要存储的变量，都挂载在本地的lifeData对象中
    uni.setStorageSync('lifeData', tmp)
  }
}
const store = new Vuex.Store({
  state: {
    vuex_token: '',
    vuex_account: '', // 用户账号
    vuex_version: '1.1.12',
    vuex_user: {
      nickName: '游客'
    },
    vuex_vip: {
      // type: '黄金会员',
      // level: 2,
      // price: '200',
      // duration: 1,
      // endTime: '2025-01-01',
      // url: '/static/hy2.png'
    },
    vuex_num: '000001',
    stockType: 'gg'
  },
  mutations: {
    $uStore(state, payload) {
      // 判断是否多层级调用，state中为对象存在的情况，诸如user.info.score = 1
      let nameArr = payload.name.split('.')
      let saveKey = ''
      let len = nameArr.length
      if (len >= 2) {
        let obj = state[nameArr[0]]
        for (let i = 1; i < len - 1; i++) {
          obj = obj[nameArr[i]]
        }
        obj[nameArr[len - 1]] = payload.value
        saveKey = nameArr[0]
      } else {
        // 单层级变量，在state就是一个普通变量的情况
        state[payload.name] = payload.value
        saveKey = payload.name
      }
      // 保存变量到本地，见顶部函数定义
      saveLifeData(saveKey, state[saveKey])
    },
    resetToken(state) {
      state.vuex_token = ''
    }
  },
  actions: {
    resetToken(context) {
      context.commit('resetToken')
    }
  }
})
// 尝试获取本地是否存在lifeData变量，第一次启动APP时是不存在的
const lifeData = uni.getStorageSync('lifeData')
console.log(lifeData, 'lifeData')
const puex = (name, value) => {
  store.commit('$uStore', {
    name,
    value
  })
}
if (lifeData) {
  puex('vuex_token', lifeData.vuex_token)
  puex('vuex_user', lifeData.vuex_user)
  // puex('vuex_vip', lifeData.vuex_vip)
  puex('vuex_account', lifeData.vuex_account)
  puex('stockType', lifeData.stockType)
}
export default store
